"""
selectolax对比lxml（也就是xpath）
对比10000个文本解析
效率约为lxml的两倍

通过css选择器来选取节点信息
"""

from selectolax.parser import HTMLParser

html = """
<demo>

    <h1>============欢迎靓仔进来学习============</h1>

    <div id='div1'>
        <a href="htt://blog.csdn.net/MarkAdc/article/details/107736445">小明</a>
        <a href="https://blog.csdn.net/MarkAdc">小白</a>
        <a href="2535.png">大牛</a>
        <a href="1241.jpg" id="python375">小黄</a>
        <a id="python275">小红</a>
    </div>

    <div id='div2'>
        <a id="python3"></a>
        <a href="2267.png"></a>
    </div>

</demo>
"""
tree = HTMLParser(html)

# 查看某个节点下的所有子节点： 某个节点>*
for node in tree.css("demo > * "):
    # print(node) # <Node h1>
    print(node.tag)  # h1 div div

# 查看某个节点所有子孙节点: 某个节点>>*
a = []
for node in tree.css("demo >>*"):
    # print(node.tag)
    a.append(node.tag)
print(a)  # ['h1', 'div', 'a', 'a', 'a', 'a', 'a', 'div', 'a', 'a']

# 包含 *
# 查找href属性值含有 http 的所有节点: [href*="http"]
for node in tree.css('[href*="http"]'):
    tag = node.tag.ljust(10)  # 返回长度宽度为10 的左对齐的字符串
    text = node.text(strip=True)  # 删除多余的空格
    attribute = node.attributes
    print(tag, text, attribute)  # a          小白 {'href': 'https://blog.csdn.net/MarkAdc'}

# 开头 ^
# 查找所有href属性值以https开头的a节点：a[href ^= 'https']    ^ 以...开头  a[] 查找a节点
for node in tree.css('[href*="http"]'):
    tag = node.tag.ljust(5)
    text = node.text(strip=True).ljust(10)
    attribute = node.attributes
    print(tag, text, attribute)  # a     小白         {'href': 'https://blog.csdn.net/MarkAdc'}

# 结尾 $
# 查找所有href属性值以png结尾的节点
for node in tree.css('[href$="png"]'):
    tag = node.tag.ljust(5)
    text = node.text(strip=True).ljust(10)
    attribute = node.attributes
    print(tag, text, attribute)  # a     大牛         {'href': '2535.png'}

# 属性值 = href
# 查找有href属性的所有节点
print("查找有href属性的所有节点: ")
for node in tree.css('[href]'):
    tag = node.tag.ljust(5)
    text = node.text(strip=True).ljust(10)
    attribute = node.attributes
    print(tag, text, attribute)

